home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Requester / MINIMAL-TOOL.LST < prev    next >
File List  |  1989-06-01  |  18KB  |  633 lines

  1. @min_tool
  2. PROCEDURE min_tool
  3.   LOCAL okx1&,okx2&,oky1&,oky2&,st_sp&,le_ze&,ma_sp&,min_x&,max_x&,min_y&,max_y&
  4.   LOCAL wÄhlbar!,x$,revers$,n_gruppen%,wert%,bremse!,gefunden!,flag!,ende!,i&
  5.   LOCAL dif&,tx&,ty&,i|,j|,j1|,k|,l|,t|,z|,boxen,text$,form$,hintergrund$,a$
  6.   @zÄhl_box(100,50,"Wieviel Gruppen hat das Formular",0,0,0,20,1,n_gruppen%)
  7.   '
  8.   DIM text$(10),form$(SUCC(n_gruppen%),10),boxen(SUCC(n_gruppen%),10,4),hintergrund$(n_gruppen%,10),wÄhlbar!(n_gruppen%,10)
  9.   FOR i|=1 TO 10
  10.     text$(i|)="Text "+STR$(i|)
  11.   NEXT i|
  12.   '
  13.   FOR i|=1 TO n_gruppen%
  14.     REPEAT
  15.       @zÄhl_box(100,50,"Wieviel Einträge hat Gruppe "+STR$(i|),0,0,0,10,1,wert%)
  16.     UNTIL wert%>0
  17.     @edit_box(100,1,"Geben Sie nun die Texte der Gruppe "+STR$(i|)+" ein!",0,0,wert%,text$())
  18.     FOR k|=1 TO wert%
  19.       form$(i|,k|)=edit$(k|)
  20.     NEXT k|
  21.     ERASE edit$()
  22.   NEXT i|
  23.   ERASE text$()
  24.   '
  25.   CLS
  26.   @gitter
  27.   @boxen
  28.   @positionieren
  29.   @rahmen
  30.   @wÄhlbare
  31.   @speichern
  32. RETURN
  33. PROCEDURE gitter
  34.   COLOR 3
  35.   FOR i&=10 TO 240 STEP 10
  36.     LINE 0,i&,640,i&
  37.   NEXT i&
  38.   FOR i&=10 TO 640 STEP 10
  39.     LINE i&,0,i&,240
  40.   NEXT i&
  41.   okx1&=550
  42.   okx2&=610
  43.   oky1&=210
  44.   oky2&=220
  45.   GRAPHMODE 1
  46.   COLOR 1
  47.   TEXT okx1&+3,oky1&+8,"WEITER!"
  48.   BOX okx1&,oky1&,okx2&,oky2&
  49. RETURN
  50. PROCEDURE boxen
  51.   FOR i|=1 TO n_gruppen%
  52.     j|=1
  53.     REPEAT
  54.       z|=1
  55.       t|=0
  56.       l|=0
  57.       WHILE INSTR(form$(i|,j|),"|",t|)
  58.         INC z|
  59.         l|=MAX(l|,INSTR(form$(i|,j|),"|",t|)-t|)
  60.         t|=SUCC(INSTR(form$(i|,j|),"|",t|))
  61.       WEND
  62.       IF l|
  63.         boxen(i|,j|,3)=l|*8+10
  64.       ELSE
  65.         boxen(i|,j|,3)=LEN(form$(i|,j|))*8+10
  66.       ENDIF
  67.       '
  68.       boxen(i|,j|,1)=st_sp&+2
  69.       boxen(i|,j|,2)=le_ze&+2
  70.       boxen(i|,j|,3)=boxen(i|,j|,3)+boxen(i|,j|,1)
  71.       boxen(i|,j|,4)=10*z|+boxen(i|,j|,2)
  72.       le_ze&=boxen(i|,j|,4)
  73.       ma_sp&=MAX(ma_sp&,boxen(i|,j|,3))
  74.       IF le_ze&>200
  75.         ADD st_sp&,ma_sp&
  76.         ma_sp&=0
  77.         le_ze&=0
  78.       ENDIF
  79.       '
  80.       @setzen
  81.       INC j|
  82.     UNTIL form$(i|,j|)=""
  83.   NEXT i|
  84. RETURN
  85. PROCEDURE position
  86.   bremse!=TRUE
  87.   gefunden!=FALSE
  88.   IF flag!
  89.     flag!=FALSE
  90.     @finden
  91.     IF gefunden!
  92.       PUT boxen(i|,j|,1),boxen(i|,j|,2),hintergrund$(i|,j|)
  93.       DEFMOUSE 5
  94.     ELSE
  95.       flag!=TRUE
  96.     ENDIF
  97.   ELSE
  98.     flag!=TRUE
  99.     dif&=boxen(i|,j|,3)-boxen(i|,j|,1)
  100.     IF MOUSEX<boxen(i|,j|,1)
  101.       SUB boxen(i|,j|,1),boxen(i|,j|,1)-MOUSEX
  102.       boxen(i|,j|,3)=boxen(i|,j|,1)+dif&
  103.       ADD boxen(i|,j|,1),2
  104.       ADD boxen(i|,j|,3),2
  105.     ELSE
  106.       ADD boxen(i|,j|,1),SUCC(MOUSEX-boxen(i|,j|,1))
  107.       boxen(i|,j|,3)=boxen(i|,j|,1)+dif&
  108.     ENDIF
  109.     dif&=boxen(i|,j|,4)-boxen(i|,j|,2)
  110.     IF MOUSEY<boxen(i|,j|,2)
  111.       SUB boxen(i|,j|,2),boxen(i|,j|,2)-MOUSEY
  112.       boxen(i|,j|,4)=boxen(i|,j|,2)+dif&
  113.     ELSE
  114.       ADD boxen(i|,j|,2),MOUSEY-boxen(i|,j|,2)
  115.       boxen(i|,j|,4)=boxen(i|,j|,2)+dif&
  116.     ENDIF
  117.     @setzen
  118.     DEFMOUSE 0
  119.   ENDIF
  120. RETURN
  121. PROCEDURE setzen
  122.   GRAPHMODE 1
  123.   IF INSTR(form$(i|,j|),"|")
  124.     GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),hintergrund$(i|,j|)
  125.     z|=0
  126.     t|=1
  127.     WHILE INSTR(form$(i|,j|),"|",t|)
  128.       INC z|
  129.       x$=MID$(form$(i|,j|),t|,INSTR(form$(i|,j|),"|",t|)-t|)
  130.       t|=SUCC(INSTR(form$(i|,j|),"|",t|))
  131.       tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(x$)*4)
  132.       ty&=boxen(i|,j|,2)-2+z|*10
  133.       TEXT tx&,ty&,x$
  134.     WEND
  135.     x$=MID$(form$(i|,j|),t|,LEN(form$(i|,j|))-PRED(t|))
  136.     tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(x$)*4)
  137.     ty&=boxen(i|,j|,2)-2+SUCC(z|)*10
  138.     TEXT tx&,ty&,x$
  139.     BOX boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4)
  140.   ELSE
  141.     GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),hintergrund$(i|,j|)
  142.     tx&=(boxen(i|,j|,1)+((boxen(i|,j|,3)-boxen(i|,j|,1))/2))-(LEN(form$(i|,j|))*4)
  143.     ty&=(boxen(i|,j|,2)+(boxen(i|,j|,4)-boxen(i|,j|,2))/2)+3
  144.     TEXT tx&,ty&,form$(i|,j|)
  145.     BOX boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4)
  146.   ENDIF
  147. RETURN
  148. PROCEDURE positionieren
  149.   flag!=TRUE
  150.   ende!=FALSE
  151.   bremse!=FALSE
  152.   DEFMOUSE 0
  153.   '
  154.   REPEAT
  155.     DO
  156.       EXIT IF MOUSEK=1 AND bremse!=FALSE
  157.       IF bremse!
  158.         bremse!=MOUSEK
  159.       ENDIF
  160.     LOOP
  161.     @position
  162.   UNTIL ende!=TRUE
  163. RETURN
  164. PROCEDURE finden
  165.   gefunden!=FALSE
  166.   IF MOUSEX>okx1& AND MOUSEX<okx2& AND MOUSEY>oky1& AND MOUSEY<oky2&
  167.     ende!=TRUE
  168.   ELSE
  169.     i|=0
  170.     REPEAT
  171.       INC i|
  172.       j|=0
  173.       REPEAT
  174.         INC j|
  175.         IF MOUSEX>boxen(i|,j|,1) AND MOUSEY>boxen(i|,j|,2) AND MOUSEX<boxen(i|,j|,3) AND MOUSEY<boxen(i|,j|,4)
  176.           j1|=j|
  177.           gefunden!=TRUE
  178.         ENDIF
  179.       UNTIL form$(i|,j|)=""
  180.     UNTIL i|>n_gruppen% OR gefunden!=TRUE
  181.     j|=j1|
  182.   ENDIF
  183. RETURN
  184. PROCEDURE rahmen
  185.   min_x&=640
  186.   max_x&=0
  187.   min_y&=640
  188.   max_y&=0
  189.   FOR i|=1 TO n_gruppen%
  190.     j|=1
  191.     REPEAT
  192.       min_x&=MIN(min_x&,boxen(i|,j|,1))
  193.       max_x&=MAX(max_x&,boxen(i|,j|,3))
  194.       min_y&=MIN(min_y&,boxen(i|,j|,2))
  195.       max_y&=MAX(max_y&,boxen(i|,j|,4))
  196.       INC j|
  197.     UNTIL form$(i|,j|)=""
  198.   NEXT i|
  199.   SUB min_x&,5
  200.   ADD max_x&,5
  201.   SUB min_y&,5
  202.   ADD max_y&,5
  203.   BOX min_x&,min_y&,max_x&,max_y&
  204. RETURN
  205. PROCEDURE wÄhlbare
  206.   GRAPHMODE 0
  207.   bremse!=TRUE
  208.   ende!=FALSE
  209.   '
  210.   REPEAT
  211.     DO
  212.       EXIT IF MOUSEK=1 AND NOT bremse!
  213.       IF bremse!
  214.         bremse!=MOUSEK
  215.       ENDIF
  216.     LOOP
  217.     bremse!=TRUE
  218.     @finden
  219.     IF gefunden!
  220.       IF wÄhlbar!(i|,j|)
  221.         wÄhlbar!(i|,j|)=FALSE
  222.       ELSE
  223.         wÄhlbar!(i|,j|)=TRUE
  224.       ENDIF
  225.       GET boxen(i|,j|,1),boxen(i|,j|,2),boxen(i|,j|,3),boxen(i|,j|,4),revers$
  226.       PUT boxen(i|,j|,1),boxen(i|,j|,2),revers$,30
  227.     ENDIF
  228.   UNTIL ende!=TRUE
  229.   '
  230. RETURN
  231. PROCEDURE speichern
  232.   FILESELECT "DATA-ZEILEN ABSPEICHERN!","SPEICHERN","RAM:",a$
  233.   OPEN "O",#1,a$
  234.   '
  235.   PRINT #1,"DATA ";max_x&-min_x&;",";max_y&-min_y&;",";n_gruppen%
  236.   FOR i|=1 TO n_gruppen%
  237.     j|=1
  238.     REPEAT
  239.       IF wÄhlbar!(i|,j|)
  240.         PRINT #1,"DATA "+form$(i|,j|)+",1,";
  241.       ELSE
  242.         PRINT #1,"DATA "+form$(i|,j|)+",0,";
  243.       ENDIF
  244.       PRINT #1,boxen(i|,j|,1)-min_x&;",";
  245.       PRINT #1,boxen(i|,j|,2)-min_y&;",";
  246.       PRINT #1,boxen(i|,j|,3)-min_x&;",";
  247.       PRINT #1,boxen(i|,j|,4)-min_y&
  248.       INC j|
  249.     UNTIL form$(i|,j|)=""
  250.     PRINT #1,"DATA -------------"
  251.   NEXT i|
  252.   CLOSEW #1
  253. RETURN
  254. ' ----------------
  255. PROCEDURE edit_box(x%,y|,u$,g_x%,g_y|,n|,VAR text$())
  256.   LOCAL ma|,t_breite%,u_breite%,f_breite%,b_breite%,b_hÖhe%,hintergrund$
  257.   LOCAL i|,j|,e_x%,e_y|,ex%,xl1%,xl2%,yl1|,yl2|,xr1%,xr2%,yr1|,yr2|,char|
  258.   LOCAL zeichen&,zeile|,spalte|,taste$,taste|,ende!,cursor$,rechts|,abbruch!
  259.   DIM edit$(n|),edit|(n|,100),zeiger_c|(n|),zeiger_z|(SUCC(n|))
  260.   abbruch!=FALSE
  261.   ende!=FALSE
  262.   '
  263.   ma|=LEN(text$(1))
  264.   FOR i|=2 TO n|
  265.     ma|=MAX(ma|,LEN(text$(i|)))
  266.   NEXT i|
  267.   MUL ma|,8
  268.   '
  269.   t_breite%=10+ma|+16+15*8+10
  270.   u_breite%=LEN(u$)*8
  271.   f_breite%=2*144+8+30
  272.   b_breite%=MAX(t_breite%,u_breite%+10,f_breite%+30,g_x%+10)
  273.   b_hÖhe%=(12+10)+g_y|+(n|*12)+(12+20)
  274.   '
  275.   GET x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4,hintergrund$
  276.   COLOR 0
  277.   PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  278.   COLOR 1
  279.   '
  280.   BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  281.   BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
  282.   ADD x%,3
  283.   ADD y|,2
  284.   '
  285.   BOX x%+b_breite%/2-(LEN(u$)*8)/2-2,y|+5,x%+b_breite%/2+(LEN(u$)*8)/2+2,y|+17
  286.   TEXT x%+b_breite%/2-(LEN(u$)*8)/2,y|+14,u$
  287.   '
  288.   IF g_x%>0
  289.     PUT x%+b_breite%/2-g_x%/2,y|+22,grafik$
  290.   ENDIF
  291.   '
  292.   e_y|=y|+22+g_y|+13
  293.   e_x%=x%+10+ma|+15
  294.   FOR i|=0 TO n|-1
  295.     TEXT x%+10,e_y|+i|*12,text$(i|+1)+":"
  296.   NEXT i|
  297.   '
  298.   ADD e_y|,2
  299.   FOR i|=0 TO n|-1
  300.     ex%=e_x%
  301.     REPEAT
  302.       INC zeichen&
  303.       TEXT ex%,e_y|+i|*12,"_"
  304.       ADD ex%,9
  305.     UNTIL ex%>x%+b_breite%-18
  306.   NEXT i|
  307.   DIV zeichen&,n|
  308.   SUB e_y|,2
  309.   '
  310.   xl1%=x%+10
  311.   xl2%=x%+154
  312.   yl1|=y|+b_hÖhe%-22
  313.   yl2|=y|+b_hÖhe%-10
  314.   xr1%=x%+b_breite%-164
  315.   xr2%=x%+b_breite%-10
  316.   yr1|=y|+b_hÖhe%-22
  317.   yr2|=y|+b_hÖhe%-10
  318.   '
  319.   BOX xl1%,yl1|,xl2%,yl2|
  320.   BOX xr1%,yr1|,xr2%,yr2|
  321.   TEXT xl1%+4,yl2|-3,"Eingabe abbrechen"
  322.   TEXT xr1%+4,yl2|-3,"Eingabe bestätigen"
  323.   '
  324.   COLOR 3
  325.   PBOX e_x%,e_y|-7,e_x%+7,e_y|+1
  326.   GET e_x%,e_y|-7,e_x%+7,e_y|+1,cursor$
  327.   COLOR 1
  328.   zeile|=1
  329.   spalte|=1
  330.   e_box
  331.   PUT x%-3,y|-2,hintergrund$
  332.   '
  333.   IF NOT abbruch!
  334.     FOR i|=1 TO n|
  335.       IF zeiger_z|(i|)
  336.         FOR j|=0 TO PRED(zeiger_z|(i|))
  337.           edit$(i|)=edit$(i|)+CHR$(edit|(i|,j|))
  338.         NEXT j|
  339.       ENDIF
  340.     NEXT i|
  341.   ENDIF
  342.   '
  343.   ERASE edit|(),zeiger_c|(),zeiger_z|()
  344. RETURN
  345. > PROCEDURE zÄhl_box(x%,y|,u$,g_x%,g_y|,mi%,ma%,step%,VAR wert%)
  346.   LOCAL zahl_l|,u_breite%,b_breite%,b_hÖhe%,box_mitte&,hintergrund$
  347.   LOCAL xl1%,xl2%,xr1%,xr2%,yl1|,yl2|,yr1|,yr2|,zahl_y|,abbruch!,ende!
  348.   '
  349.   zahl_l|=LEN(STR$(ma%))*8+10
  350.   u_breite%=LEN(u$)*8
  351.   b_breite%=MAX(u_breite%+10,120,zahl_l|+90)
  352.   b_hÖhe%=(12+10)+g_y|+15+(12+20)
  353.   box_mitte&=x%+b_breite%/2
  354.   '
  355.   COLOR 0
  356.   GET x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4,hintergrund$
  357.   PBOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  358.   COLOR 1
  359.   '
  360.   COLOR 1
  361.   BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  362.   BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
  363.   ADD x%,3
  364.   ADD y|,2
  365.   '
  366.   BOX box_mitte&-(LEN(u$)*8)/2-2,y|+5,x%+b_breite%/2+(LEN(u$)*8)/2+2,y|+17
  367.   TEXT box_mitte&-(LEN(u$)*8)/2,y|+14,u$
  368.   '
  369.   IF g_x%>0
  370.     PUT box_mitte&-g_x%/2,y|+22,grafik$
  371.   ENDIF
  372.   '
  373.   xl1%=x%+10
  374.   xl2%=x%+73
  375.   yl1|=y|+b_hÖhe%-18
  376.   yl2|=y|+b_hÖhe%-6
  377.   xr1%=x%+b_breite%-36
  378.   xr2%=x%+b_breite%-10
  379.   yr1|=y|+b_hÖhe%-18
  380.   yr2|=y|+b_hÖhe%-6
  381.   '
  382.   BOX xl1%,yl1|,xl2%,yl2|
  383.   BOX xr1%,yr1|,xr2%,yr2|
  384.   TEXT xl1%+4,yl2|-3,"Abbruch"
  385.   TEXT xr1%+4,yl2|-3,"OK"
  386.   '
  387.   zahl_y|=y|+22+g_y|+10
  388.   BOX box_mitte&-zahl_l|/2,zahl_y|,box_mitte&+zahl_l|/2,zahl_y|+12
  389.   '
  390.   ini_x&=box_mitte&+zahl_l|/2+10
  391.   ina_x&=ini_x&+25
  392.   count_o|=zahl_y|
  393.   count_u|=count_o|+12
  394.   TEXT ini_x&+3,count_u|-3,"+"
  395.   LINE ini_x&,count_o|,ini_x&,count_u|
  396.   DRAW  TO ina_x&,count_o|+6
  397.   DRAW  TO ini_x&,count_o|
  398.   '
  399.   dei_x&=box_mitte&-zahl_l|/2-10
  400.   dea_x&=dei_x&-25
  401.   TEXT dei_x&-9,count_u|-3,"-"
  402.   LINE dei_x&,count_o|,dei_x&,count_u|
  403.   DRAW  TO dea_x&,count_o|+6
  404.   DRAW  TO dei_x&,count_o|
  405.   '
  406.   ADD zahl_y|,9
  407.   zahl_l|=LEN(STR$(wert%))*8
  408.   TEXT box_mitte&-zahl_l|/2,zahl_y|,wert%
  409.   '
  410.   REPEAT
  411.     IF MOUSEK=1
  412.       IF MOUSEY>yl1| AND MOUSEY<yl2|
  413.         IF MOUSEX>xl1% AND MOUSEX<xl2%
  414.           abbruch!=TRUE
  415.           ende!=TRUE !Abbruch
  416.         ELSE IF MOUSEX>xr1% AND MOUSEX<xr2%
  417.           ende!=TRUE !OK
  418.         ENDIF
  419.       ELSE IF MOUSEY>count_o| AND MOUSEY<count_u| AND NOT bremse!
  420.         IF MOUSEX>ini_x& AND MOUSEX<ina_x& AND wert%<=ma%-step%
  421.           ADD wert%,step%
  422.           bremse!=1
  423.           verÄnderung!=TRUE
  424.         ELSE IF MOUSEX>dea_x& AND MOUSEX<dei_x& AND wert%>=mi%+step%
  425.           SUB wert%,step%
  426.           bremse!=1
  427.           verÄnderung!=TRUE
  428.         ENDIF
  429.       ENDIF
  430.     ELSE IF MOUSEK=0
  431.       bremse!=0
  432.     ENDIF
  433.     '
  434.     IF verÄnderung!
  435.       verÄnderung!=FALSE
  436.       COLOR 0
  437.       PBOX SUCC(box_mitte&-zahl_l|/2),zahl_y|-8,PRED(box_mitte&+zahl_l|/2),zahl_y|+2
  438.       COLOR 1
  439.       zahl_l|=LEN(STR$(wert%))*8
  440.       TEXT box_mitte&-zahl_l|/2,zahl_y|,wert%
  441.     ENDIF
  442.   UNTIL ende!=TRUE
  443. RETURN
  444. > PROCEDURE e_box
  445.   REPEAT
  446.     taste$=INKEY$
  447.     IF MOUSEX>xl1% AND MOUSEX<xl2% AND MOUSEY>yl1| AND MOUSEY<yl2| AND MOUSEK=1
  448.       abbruch!=TRUE
  449.       ende!=TRUE
  450.     ELSE IF MOUSEX>xr1% AND MOUSEX<xr2% AND MOUSEY>yr1| AND MOUSEY<yr2| AND MOUSEK=1
  451.       ende!=TRUE
  452.     ELSE IF taste$<>""
  453.       IF LEN(taste$)=1
  454.         taste|=ASC(taste$)
  455.       ELSE IF LEN(taste$)=2
  456.         taste|=ASC(RIGHT$(taste$))
  457.         SUB taste|,64
  458.       ELSE IF LEN(taste$)>2
  459.         taste|=0
  460.       ENDIF
  461.       SELECT taste|
  462.       CASE 1 !Cursor up
  463.         IF zeile|>1
  464.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  465.           DEC zeile|
  466.           IF zeiger_z|(zeile|)<zeichen&
  467.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  468.             zeiger_c|(zeile|)=PRED(spalte|)
  469.           ELSE
  470.             eintrag_neu
  471.           ENDIF
  472.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  473.         ENDIF
  474.       CASE 2 !Cursor down
  475.         IF zeile|<n|
  476.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  477.           INC zeile|
  478.           IF zeiger_z|(zeile|)<zeichen&
  479.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  480.             zeiger_c|(zeile|)=PRED(spalte|)
  481.           ELSE
  482.             eintrag_neu
  483.           ENDIF
  484.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  485.         ENDIF
  486.       CASE 3 !Cursor right
  487.         IF zeiger_c|(zeile|)<zeiger_z|(zeile|)
  488.           IF spalte|<zeichen& AND spalte|<=zeiger_z|(zeile|)
  489.             ' Cursor vor Text und Feldende
  490.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  491.             INC spalte|
  492.             INC zeiger_c|(zeile|)
  493.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  494.           ELSE IF spalte|=zeichen& AND zeiger_c|(zeile|)<zeiger_z|(zeile|)
  495.             ' Cursor am Feldende und vor Textende
  496.             shift(2,PRED(zeichen&),1,edit|(zeile|,zeiger_c|(zeile|)),PRED(zeichen&))
  497.             DEC rechts|
  498.             INC zeiger_c|(zeile|)
  499.           ENDIF
  500.         ENDIF
  501.       CASE 4 !Cursor left
  502.         IF spalte|>1
  503.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  504.           DEC spalte|
  505.           DEC zeiger_c|(zeile|)
  506.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  507.         ELSE IF spalte|=1 AND zeiger_c|(zeile|)>0
  508.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  509.           shift(1,zeichen&-2,2,edit|(zeile|,PRED(zeiger_c|(zeile|))),1)
  510.           DEC zeiger_c|(zeile|)
  511.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  512.           IF zeiger_z|(zeile|)-zeiger_c|(zeile|)>=zeichen&
  513.             INC rechts|
  514.           ENDIF
  515.         ENDIF
  516.       CASE 13
  517.         IF zeile|=n|
  518.           ende!=TRUE
  519.         ELSE
  520.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  521.           INC zeile|
  522.           IF zeiger_z|(zeile|)<zeichen&
  523.             spalte|=1
  524.             zeiger_c|(zeile|)=0
  525.           ELSE
  526.             eintrag_neu
  527.           ENDIF
  528.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  529.         ENDIF
  530.       CASE 8 !Backspace
  531.         IF spalte|>1 AND spalte|<zeichen&
  532.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  533.           IF rechts|
  534.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  535.             DEC rechts|
  536.           ELSE
  537.             char|=32
  538.           ENDIF
  539.           position|=PRED(zeichen&)
  540.           shift(spalte|,PRED(zeichen&),PRED(spalte|),char|,position|)
  541.           @entf(zeile|,PRED(zeiger_c|(zeile|)),zeiger_z|(zeile|),edit|())
  542.           DEC zeiger_c|(zeile|)
  543.           DEC zeiger_z|(zeile|)
  544.           DEC spalte|
  545.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  546.         ENDIF
  547.       CASE 127 !Delete
  548.         IF spalte|<zeichen& AND zeiger_z|(zeile|)>zeiger_c|(zeile|)
  549.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  550.           IF rechts|
  551.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  552.             DEC rechts|
  553.           ELSE
  554.             char|=32
  555.           ENDIF
  556.           position|=PRED(zeichen&)
  557.           shift(SUCC(spalte|),zeichen&-1,spalte|,char|,position|)
  558.           @entf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),edit|())
  559.           DEC zeiger_z|(zeile|)
  560.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  561.         ENDIF
  562.         '
  563.       CASE 32 TO 126,196 TO 252
  564.         IF zeiger_z|(zeile|)<100
  565.           IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|=zeichen&
  566.             ' Cursor am Textende und am Feldende
  567.             shift(2,PRED(zeichen&),1,taste|,PRED(zeichen&))
  568.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  569.           ELSE IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|<zeichen&
  570.             ' Cursor am Textende und vor Feldende
  571.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  572.             TEXT e_x%+PRED(spalte|)*9,(e_y|)+PRED(zeile|)*12,CHR$(taste|)
  573.             INC spalte|
  574.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  575.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  576.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|=PRED(zeichen&)
  577.             ' Cursor im Text und am Feldende
  578.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  579.             shift(2,PRED(spalte|),1,taste|,PRED(spalte|))
  580.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  581.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  582.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|<zeichen&
  583.             ' Cursor im Text und vor Feldende
  584.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  585.             shift(spalte|,zeichen&-2,SUCC(spalte|),taste|,spalte|)
  586.             INC spalte|
  587.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  588.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  589.             IF zeiger_z|(zeile|)-zeiger_c|(zeile|)+spalte|>zeichen&
  590.               INC rechts|
  591.             ENDIF
  592.           ENDIF
  593.           INC zeiger_c|(zeile|)
  594.           INC zeiger_z|(zeile|)
  595.         ENDIF
  596.       ENDSELECT
  597.     ENDIF
  598.   UNTIL ende!=TRUE
  599. RETURN
  600. > PROCEDURE eintrag_neu
  601.   spalte|=1
  602.   zeiger_c|(zeile|)=0
  603.   DEFFILL 0
  604.   PBOX e_x%,e_y|-8+PRED(zeile|)*12,e_x%+9*zeichen&,e_y|+2+PRED(zeile|)*12
  605.   DEFFILL 1
  606.   SUB zeichen&,2
  607.   FOR i|=0 TO zeichen&
  608.     TEXT e_x%+i|*9,e_y|+PRED(zeile|)*12,CHR$(edit|(zeile|,i|))
  609.   NEXT i|
  610.   ADD zeichen&,2
  611.   rechts|=zeiger_z|(zeile|)-PRED(zeichen&)
  612. RETURN
  613. > PROCEDURE shift(erster|,letzter|,neu|,char|,position|)
  614.   GET e_x%+PRED(erster|)*9,e_y|-7+PRED(zeile|)*12,e_x%-1+letzter|*9,e_y|+1+PRED(zeile|)*12,rettung$
  615.   PUT e_x%+PRED(neu|)*9,e_y|-7+PRED(zeile|)*12,rettung$
  616.   TEXT e_x%+PRED(position|)*9,e_y|+PRED(zeile|)*12,CHR$(char|)
  617. RETURN
  618. > PROCEDURE entf(z|,s|,bis|,VAR a|())
  619.   REPEAT
  620.     a|(z|,s|)=a|(z|,SUCC(s|))
  621.     INC s|
  622.   UNTIL s|=>bis|
  623.   a|(z|,bis|)=0
  624. RETURN
  625. > PROCEDURE einf(z|,s|,bis|,wert_n|,VAR a|())
  626.   REPEAT
  627.     wert_a|=a|(z|,s|)
  628.     a|(z|,s|)=wert_n|
  629.     wert_n|=wert_a|
  630.     INC s|
  631.   UNTIL s|>bis|
  632. RETURN
  633.